/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ManagedBeans;

import ComponenteDatos.EgresosFacadeLocal;
import ComponenteEntidad.Agencia;
import ComponenteEntidad.Egresos;
import ComponenteEntidad.Tipoegreso;
import ComponenteEntidad.Empleado;
import ComponenteEntidad.Tipocomprobante;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

/**
 *
 * @author ANTHONY
 */
@ManagedBean
@SessionScoped
public class ManagedBeanEgreso implements Serializable {

    @EJB
    private EgresosFacadeLocal EgresosFacade;
    private Egresos objetoEgresos;
    private Egresos objetoEgresosCrear;
    private List<Egresos> lista;
    private Tipoegreso objetoTipoegreso;
    private Empleado objetoEmpleado;
    private Agencia objetoAgencia;
    private Tipocomprobante objetoTipocomprobante;
    private List<SelectItem> objetoItems = new LinkedList<SelectItem>();
    private HashMap<Integer, Egresos> myobjeto = new HashMap<Integer, Egresos>();

    public ManagedBeanEgreso() {
        objetoEgresos = new Egresos();
        objetoEgresosCrear = new Egresos();
        objetoEgresos.setIdEgresos(1);
        lista = new LinkedList<Egresos>();
        objetoTipoegreso = new Tipoegreso();
        objetoEmpleado = new Empleado();
        objetoTipocomprobante = new Tipocomprobante();
        objetoAgencia=new Agencia();
        objetoEgresosCrear.setEgreNroDocComp("");
        objetoEgresosCrear.setEgreFecha(new Date());
        objetoEgresosCrear.setEgreDetalle("");
        objetoEgresosCrear.setEgreMonto(new BigDecimal("0.0"));
        objetoEgresosCrear.setEgreEstado(true);

    }

    public Agencia getObjetoAgencia() {
        return objetoAgencia;
    }

    public void setObjetoAgencia(Agencia objetoAgencia) {
        this.objetoAgencia = objetoAgencia;
    }
    
    public Egresos getObjtetoEgresos() {
        return objetoEgresos;
    }

    public Egresos getObjtetoEgresos(int id) {
        return (Egresos) myobjeto.get(id);
    }

    public void setObjtetoEgresos(Egresos objtetoEgresos) {
        this.objetoEgresos = objtetoEgresos;
    }

    public Egresos getObjtetoEgresosCrear() {
        return objetoEgresosCrear;
    }

    public void setObjtetoEgresosCrear(Egresos objtetoEgresosCrear) {
        this.objetoEgresosCrear = objtetoEgresosCrear;
    }

    public List<Egresos> lista(ManagedBeanIniciosesion sesion) {
        lista = new LinkedList<Egresos>();
        List<Egresos> listaTemporal = new LinkedList<Egresos>();
        listaTemporal = EgresosFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            if (listaTemporal.get(i).getEgreEstado() == true && listaTemporal.get(i).getEmpleado().equals(sesion.getObjetoEmpleado()) && !listaTemporal.get(i).getEmpleado().getCargo().getCarCargo().equalsIgnoreCase("ADMINISTRADOR")) {
                lista.add(listaTemporal.get(i));
            }else if(listaTemporal.get(i).getEgreEstado() == true && listaTemporal.get(i).getEmpleado().getCargo().getCarCargo().equalsIgnoreCase("ADMINISTRADOR")){
                lista.add(listaTemporal.get(i));
            }
        }
        return lista;
    }

    public void setLista(List<Egresos> lista) {
        this.lista = lista;
    }

    public Tipoegreso getObjetoTipoegreso() {
        return objetoTipoegreso;
    }

    public void setObjetoTipoegreso(Tipoegreso objetoTipoegreso) {
        this.objetoTipoegreso = objetoTipoegreso;
    }

    public Empleado getObjetoEmpleado() {
        return objetoEmpleado;
    }

    public void setObjetoEmpleado(Empleado objetoEmpleado) {
        this.objetoEmpleado = objetoEmpleado;
    }

    public Tipocomprobante getObjetoTipocomprobante() {
        return objetoTipocomprobante;
    }

    public void setObjetoTipocomprobante(Tipocomprobante objetoTipocomprobante) {
        this.objetoTipocomprobante = objetoTipocomprobante;
    }

    public List<SelectItem> getObjetoItems() {
        lista = new ArrayList<Egresos>();
        objetoItems = new LinkedList<SelectItem>();
        lista = EgresosFacade.findAll();
        for (Egresos p : lista) {
            if (p.getEgreEstado() == true) {
                myobjeto.put(p.getIdEgresos(), p);
                objetoItems.add(new SelectItem(p, p.getEgreNroDocComp()));
            }
        }
        return objetoItems;
    }

    public void setObjetoItems(List<SelectItem> objetoItems) {
        this.objetoItems = objetoItems;
    }

    public HashMap<Integer, Egresos> getMyobjeto() {
        return myobjeto;
    }

    public void setMyobjeto(HashMap<Integer, Egresos> myobjeto) {
        this.myobjeto = myobjeto;
    }

    public void insertar(ManagedBeanIniciosesion sesion) {
        try {
            if (!verificarSiexiste(objetoEgresosCrear.getEgreNroDocComp())) {
                objetoEgresosCrear.setEgreEstado(true);
                objetoEgresosCrear.setEgreFecha(new Date());
//            objetoEgresosCrear.setEmpleado(objetoEmpleado); 
//            objetoEgresosCrear.setTipocomprobante(objetoTipocomprobante);
//            objetoEgresosCrear.setTipoegreso(objetoTipoegreso);
                objetoEgresosCrear.setAgencia(sesion.getObjetoEmpleado().getAgencia());
                objetoEgresosCrear.setEmpleado(sesion.getObjetoEmpleado());
                objetoEgresosCrear.setIngEstadoEgreso(1);
                EgresosFacade.create(objetoEgresosCrear);
                FacesMessage msg = new FacesMessage("Informacion", "Registro Ingresado");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                objetoEgresosCrear = new Egresos();
            } else {
                FacesMessage msg = new FacesMessage("Informacion", "Ya Existe Nro. Comprobante de Egreso");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void editar() {
        try {
            EgresosFacade.edit(objetoEgresos);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void eliminar() {
        try {
            objetoEgresos.setEgreEstado(false);
            EgresosFacade.edit(objetoEgresos);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void onRowSelect(SelectEvent event) {
        FacesMessage msg = new FacesMessage("Agencia Seleccionado", ((Egresos) event.getObject()).getIdEgresos().toString());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onRowUnselect(UnselectEvent event) {
        FacesMessage msg = new FacesMessage("Agencia No seleccionado", ((Egresos) event.getObject()).getIdEgresos().toString());

        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public boolean verificarSiexiste(String desc) {
        boolean existe = false;
        lista = new LinkedList<Egresos>();
        List<Egresos> listaTemporal = new LinkedList<Egresos>();
        listaTemporal = EgresosFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            if (listaTemporal.get(i).getEgreNroDocComp().equalsIgnoreCase(desc) && listaTemporal.get(i).getEgreEstado() == true) {
                existe = true;
            }
        }

        return existe;
    }
}
